﻿using System;
using System.Runtime.Serialization;

namespace Director.StockSharp.Transaq.Native.Commands
{
	internal class NewCondOrderMessage : NewOrderMessage
	{
		public NewCondOrderMessage()
		{
			Id = ApiCommands.NewCondOrder;
		}

		public TransaqAlgoOrderConditionTypes CondType { get; set; }
		public decimal CondValue { get; set; }
		
		public TransaqAlgoOrderValidTypes ValidAfterType { get; set; }
		public DateTime? ValidAfter { get; set; }
		
		public TransaqAlgoOrderValidTypes ValidBeforeType { get; set; }
		public DateTime? ValidBefore { get; set; }
	}

	[Serializable]
	[DataContract]
	public enum TransaqAlgoOrderConditionTypes
	{
		/// <summary>
		/// Нет.
		/// </summary>
		[EnumMember]
		None,

		/// <summary>
		/// Лучшая цена покупки.
		/// </summary>
		[EnumMember]
		Bid,

		/// <summary>
		/// Лучшая цена покупки или сделка по заданной цене и выше.
		/// </summary>
		[EnumMember]
		BidOrLast,

		/// <summary>
		/// Лучшая цена продажи.
		/// </summary>
		[EnumMember]
		Ask,

		/// <summary>
		/// Лучшая цена продажи или сделка по заданной цене и ниже.
		/// </summary>
		[EnumMember]
		AskOrLast,

		/// <summary>
		/// Время выставления заявки на Биржу.
		/// </summary>
		[EnumMember]
		Time,

		/// <summary>
		/// Обеспеченность ниже заданной.
		/// </summary>
		[EnumMember]
		CovDown,

		/// <summary>
		/// Обеспеченность выше заданной.
		/// </summary>
		[EnumMember]
		CovUp,

		/// <summary>
		/// Сделка на рынке по заданной цене или выше.
		/// </summary>
		[EnumMember]
		LastUp,

		/// <summary>
		/// Сделка на рынке по заданной цене или ниже.
		/// </summary>
		[EnumMember]
		LastDown
	}

	/// <summary>
	/// Условие действительности заявки.
	/// </summary>
	[Serializable]
	[System.Runtime.Serialization.DataContract]
	public enum TransaqAlgoOrderValidTypes
	{
		/// <summary>
		/// По дате и времени.
		/// </summary>
		[EnumMember]
		Date,

		/// <summary>
		/// Немедленно.
		/// </summary>
		[EnumMember]
		Immediately,

		/// <summary>
		/// До отмены.
		/// </summary>
		[EnumMember]
		TillCancelled
	}
}